<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //第一遍 finally
        const p = new Promise((resolve,reject)=>{
            
            try{
                console.log('请求数据');
                setTimeout(()=>{
                    // throw new Error('你的网络有问题请链接网络')
                    console.log('请求数据成功');
                    resolve('ok')
                })
            }catch(e){
                reject(e.message)
            }
        })

        //无论调用finally方法的promise实例 是成功还是失败都可以进入finally回调函数中
        //finally 不会接收promise实例的值
        //finally的返回值:
            //默认穿透(finally返回值和调用finally的promise实例保持一致)
            //当finally的回调函数返回失败的promise实例,返回值和这个promise实例保持一致
            //当finally里面有错误没有处理,finally的返回值是这个错误信息
        const p1 = p.finally((reason)=>{
            // console.log(reason);//undefined
            return new Promise((resolve,reject)=>{
                resolve('成功')
                reject('有问题')
            })

        })
        console.log('p1',p1);

        //第二遍 finally
        const k = new Promise((resolve,reject)=>{
            
            try{
                console.log('请求数据');
                setTimeout(()=>{
                    // throw new Error('你的网络有问题请链接网络')
                    console.log('请求数据成功');
                    resolve('成功')
                })
            }catch(e){
                reject(e.message)
            }
        })

        //无论调用finally方法的promise实例 是成功还是失败都可以进入finally回调函数中
        //finally 不会接收promise实例的值
        //finally的返回值:
            //默认穿透(finally返回值和调用finally的promise实例保持一致)
            //当finally的回调函数返回失败的promise实例,返回值和这个promise实例保持一致
            //当finally里面有错误没有处理,finally的返回值是这个错误信息
        const k1 = k.finally((reason)=>{
            // console.log(reason);//undefined
            return new Promise((resolve,reject)=>{
                resolve('成功')
                reject('请检查网络')
            })

        })
        console.log('k1',k1);



        //第三遍 finally
        const l = new Promise((resolve,reject)=>{
            
            try{
                console.log('请求数据');
                setTimeout(()=>{
                    throw new Error('你的网络有问题')
                    console.log('请求数据成功');
                    resolve('成功')
                })
            }catch(e){
                reject(e.message)
            }
        })

        //无论调用finally方法的promise实例 是成功还是失败都可以进入finally回调函数中
        //finally 不会接收promise实例的值
        //finally的返回值:
            //默认穿透(finally返回值和调用finally的promise实例保持一致)
            //当finally的回调函数返回失败的promise实例,返回值和这个promise实例保持一致
            //当finally里面有错误没有处理,finally的返回值是这个错误信息
        const l1 = l.finally((reason)=>{
            console.log(reason);//undefined
            return new Promise((resolve,reject)=>{
                resolve('成功')
                reject('请检查网络 是否链接')
            })

        })
        console.log('l1',l1);

    </script>
</body>
</html>